#!/usr/bin/python3  
# -*- coding: UTF-8 -*-  

import subprocess  
import time
import datetime
import sys as osSys  

def runcmd(command, timeout=60, retries=3):  
    for attempt in range(retries):
        print("***************************************************")
        print("*                                                 *")
        print("*      超时，正在尝试重新执行（尝试次数：%d）      *" % (attempt + 1))
        print("*                                                 *")
        print("***************************************************")
        try:  
            # 使用subprocess.run运行命令，并设置超时  
            process = subprocess.run(command, shell=False, timeout=timeout)
            # 如果命令成功执行而没有超时，返回进程的结果
            return process
        except subprocess.TimeoutExpired as e:  
            # 如果发生超时，打印一条消息，并准备在下一次循环中重新尝试  
            print(f"命令超时，正在尝试重新执行（剩余尝试次数：{retries - attempt - 1}）...")
            # 可以选择在这里添加一些延迟，以避免连续快速地重新尝试
            time.sleep(5)  # 等待5秒后再重新尝试
        except Exception as e:  
            # 捕获其他可能发生的异常，并打印错误信息  
            print(f"执行命令时发生错误：{e}")
            # 如果不希望在其他异常时重新尝试，可以在这里退出函数或抛出异常  
            return None  # 或者使用 raise 来重新抛出异常  
    # 如果所有尝试都失败了，返回None或抛出异常
    print("所有重试都已失败。")
    return None  

def tuRun():  
    otherArs = ["python3", "./dt.py", "-a", "auto"] + osSys.argv[1:]
    now = datetime.datetime.now()
    hour = now.hour
    num = 14 if (hour < 3) else 40
    timeOut = 60 * 18
    result = runcmd(otherArs, timeOut, num)
    print("result", result)
    if result is None:
        print("命令执行失败，所有重试都已失败。")
        runcmd(otherArs, timeOut, num)
    else:  
        # 命令成功执行，这里可以继续执行后续任务  
        print("命令成功执行，现在执行后续任务...")  
        runcmd(otherArs, timeOut, num)

# 假设我们只想运行一次tuRun  
tuRun()
